package br.edu.udc.sistemas.ia5.dao;

import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;

import br.edu.udc.sistemas.ia5.database.Database;
import br.edu.udc.sistemas.ia5.entity.Cliente;

public class DaoCliente {
	
	public void save(Cliente cliente){		
		String sql;
		if (this.findByPrimaryKey(cliente) == null){
			sql = "insert into cliente (idCliente, nome, cpf, rg, rua, numero, bairro, cidade, estado, cep, telefone, celular, email)" +
					"values ("+cliente.getId()+", '"+cliente.getNome()+"', '"+cliente.getCpf()+"', '"+ cliente.getRg()+"', '"+ cliente.getRua()+
					"', '"+cliente.getNumero()+"', '"+cliente.getBairro()+"', '"+cliente.getCidade()+"', '"+cliente.getEstado()+"', '"+cliente.getCep()+
					"', '"+cliente.getTelefone()+"', '"+cliente.getCelular()+"', '"+cliente.getEmail()+"')";
		} else {
			sql = "update Cliente set nome = '"+cliente.getNome()+"', cpf = '"+cliente.getCpf()+"', rg = '"+cliente.getRg()+"', rua = '"+ cliente.getRua()+
					"', numero = '"+cliente.getNumero()+
					"', bairro = '"+cliente.getBairro()+"', cidade = '"+cliente.getCidade()+"', estado = '"+cliente.getEstado()+"', cep = '"+cliente.getCep()+
					"', telefone = '"+cliente.getTelefone()+"', celular = '"+cliente.getCelular()+"', email = '"+cliente.getEmail()+"'";
		}
		Database database = new Database();
		System.out.println(sql);
		try {
			Statement stmt = database.getConnection().createStatement();
			stmt.executeUpdate(sql);
			database.getConnection().commit();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void delete(Cliente cliente){		
		if ((cliente != null) && (cliente.getId() != null)){
			Database database = new Database();
			try {
				Statement stmt = database.getConnection().createStatement();
				String sql = "delete from Cliente where idCliente = "+cliente.getId();
				stmt.executeUpdate(sql);
				database.getConnection().commit();
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
		}
	}
	
	public Cliente[] find(Cliente cliente){
		try {
			String sql = "select idCliente, nome, cpf, rg, rua, numero, bairro, cidade, estado, cep, telefone, celular, email from Cliente";
			if (cliente != null){
				boolean bWhere = false;
				if ((cliente.getId() != null) && (cliente.getId() > 0)){
					sql += " where idCliente = "+cliente.getId();
					bWhere = true;
				}
				if ((cliente.getCpf() != null) && (!cliente.getCpf().equals(""))){
					if (bWhere){
						sql += " and";
					} else {
						sql += " where";
					}
					sql += " cpf = '"+cliente.getCpf()+"'";
				}
			}
			System.out.println(sql);
			Database database = new Database();
			Statement stmt = database.getConnection().createStatement();
			ResultSet rst = stmt.executeQuery(sql);
			Vector vetor = new Vector();
			while (rst.next()){
				Cliente clienteAux = new Cliente();
				clienteAux.setId(rst.getInt("idCliente"));
				clienteAux.setNome(rst.getString("nome"));
				clienteAux.setBairro(rst.getString("bairro"));
				clienteAux.setCelular(rst.getString("celular"));
				clienteAux.setCep(rst.getString("cep"));
				clienteAux.setCidade(rst.getString("cidade"));
				clienteAux.setCpf(rst.getString("cpf"));
				clienteAux.setEmail(rst.getString("email"));
				clienteAux.setEstado(rst.getString("estado"));
				clienteAux.setNumero(rst.getString("numero"));
				clienteAux.setRg(rst.getString("rg"));
				clienteAux.setRua(rst.getString("rua"));
				clienteAux.setTelefone(rst.getString("telefone"));
				vetor.add(clienteAux);
			}
			return (Cliente[]) vetor.toArray(new Cliente[vetor.size()]);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		}
	}
	
	public Cliente findByPrimaryKey(Cliente cliente){
		if ((cliente != null) && (cliente.getId() != null)){
			Cliente clienteAux = new Cliente();
			clienteAux.setId(cliente.getId());
			Cliente lista[] = this.find(clienteAux);
			if (lista.length > 0){
				return lista[0];
			}
		}
		return null;
	}
	
}
